/**
 * describe:
 *
 * @author chaP
 * @date 2019/04/11
 */
package CodingTest.AC20190410;

import java.util.ArrayList;
import java.util.List;

/**
 * leetcode - 78
 * 给定一组不含重复元素的整数数组 nums，返回该数组所有可能的子集（幂集）。

 说明：解集不能包含重复的子集。

 示例:

 输入: nums = [1,2,3]
 输出:
 [
 [3],
 [1],
 [2],
 [1,2,3],
 [1,3],
 [2,3],
 [1,2],
 []
 ]
 */
public class subset {

    public List<List<Integer>> subset(int[] nums){
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        List<Integer> list = new ArrayList<Integer>();
        helper(result,list,nums,0);
        return result;
    }
    public void helper(List<List<Integer>> result,List<Integer> list,int[] nums,int start){
        result.add(new ArrayList<>(list));
        for(int i = start;i<nums.length;i++) {
            list.add(nums[i]);
            helper(result,list,nums,i+1);
            list.remove(list.size()-1);

        }
        }

    public static void main(String[] args) {
        subset sb = new subset();
        int [] nums = {1,2,3};
        System.out.println(sb.subset(nums));
    }
    }

